<?php

namespace Siese\EntityBundle\Controller;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use Siese\EntityBundle\Entity\InspeccionesEntidadesPob;
use Siese\EntityBundle\Form\InspeccionesPobSemPrivMasType;  // Formuario SemiPrivado Masculino
use Siese\EntityBundle\Entity\EqTecProfEntidadInsPob;
use Siese\EntityBundle\Entity\AsisTecProfEntidadInsPob;
use Siese\EntityBundle\Entity\PartDisenoActEntInsPob;
use Siese\EntityBundle\Entity\ComuFuncionarioEntidadInsPob;
use Siese\EntityBundle\Entity\InfraestructuraEntidadInsPob;
use Siese\EntityBundle\Entity\CondicionHabEntidadInsPob;
use Siese\EntityBundle\Entity\CalidadServBasEntInsPob;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Siese\EntityBundle\Form\FiltrosBusquedaType;
use Siese\EntityBundle\Entity\MediosComunicacionEntidadInspeccionPob;

/**
 * InspeccionesPobSemPrivMas controller.
 *
 */
class InspeccionesPobSemPrivMasController extends Controller
{

    /**
     * Index de las Inspecciones de Población Masculina Privada de Libertad
     */
    public function indexAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        $servicioBloqueo = $this->container->get('siese_entity.bloqueo_inspeccion');
        $verificarBloqueo = $servicioBloqueo->verificar($this->getUser());
        
        /* Se buscan las inspecciones por el tipo de la Inspeccion (F,M) y el
         * tipo de medida (P,S)
         */
        $arregloFiltroBusqueda = array('tipoMedida' => 'S',
                                       'tipoInspeccion' => 'M');
        $entities = null;

        // Si el usuario es registrador solo ve sus inspecciones
        if (true === $this->get('security.context')->isGranted('ROLE_USUARIO')):
          $arregloFiltroBusqueda['usuario'] = $this->getUser(); 
        elseif(true === $this->get('security.context')->isGranted('ROLE_DEFENSOR')):
          foreach($this->getUser()->getSedesUsuario() as $sedeUsuario):
            $sedes[] = $sedeUsuario->getSede()->getId();
          endforeach;
          $arregloFiltroBusqueda['sede'] = $sedes;
        endif;
        
        $servFiltrosBusqueda = $this->container->get('siese_entity.generar_filtros_busqueda');
        $formFiltrosBusqueda = $servFiltrosBusqueda->generarFormularioFiltros('inspeccion_poblacion_semi_masculino');

        if ($request->isMethod('POST')){
            
            $formFiltrosBusqueda->handleRequest($request);
            
            $resFiltrosBusqueda = $request->request->get('siese_filtros_busqueda');
            
            
            $arregloFiltroBusqueda['ano'] = $resFiltrosBusqueda['anios'];
            $arregloFiltroBusqueda['entidad'] = $resFiltrosBusqueda['entidad'];
            $arregloFiltroBusqueda['estatus'] = array('R','P','V');
            $entities = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->findBy($arregloFiltroBusqueda);
            
            
            (!$entities ? $this->get('session')->getFlashBag()->set('warning-no-inspecciones','No existen inspecciones registradas para la busqueda realizada.') : '' );

       }
       
        return $this->render('SieseEntityBundle:InspeccionesEntidadesPob/MasSemiPriv:index.html.twig', array(
            'entities' => $entities,
            'formFiltrosBusqueda' => $formFiltrosBusqueda->createView(),
            'verificarBloqueo' => $verificarBloqueo
        ));
    }
    
    
    /**
     * Creates a new InspeccionesEntidadesPob entity.
     *
     */
    public function createAction(Request $request,$id)
    {
      $em = $this->getDoctrine()->getManager();
      $entity = ($id ? $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id) : new InspeccionesEntidadesPob());        
      $usuario = $this->getUser();
      $form = $this->createCreateForm($entity,$usuario);
      $form->handleRequest($request);
      $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
      $catAsistenciaTecnica = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
      $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
      $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
       
        
        if ($request->getMethod() === 'POST' or $request->getMethod() ==='PUT') {
            $em = $this->getDoctrine()->getManager();
            
            $fechaActual = new \DateTime('now');
            
            $entity->setUsuario($usuario);
            $entity->setFeRegistro($fechaActual);
            $entity->setFeElaboracion($fechaActual);
            $entity->setAno($fechaActual->format('Y'));
            $entity->setEstatus('R');
            $entity->setTipoInspeccion('M');  // Masculino
            $entity->setTipoMedida('S');      // SemiPrivada            
            
            /* Servicio para generar el codigo de la inspeccion */
            $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
            $fechaActual = ($entity->getFeRegistro() ? $entity->getFeRegistro() : new \DateTime('now'));
            $servCargarRelacionesInspecciones->crearCodigoInspeccion($entity,$form,'MS',$fechaActual);
            /* Servicio para generar el codigo de la inspeccion */
            
            $entity->setEstadoInspeccion($form->get('estadoEnt')->getData()); 
            
            $entity->setEntidad($form->get('entidad')->getData());
            
            $em->persist($entity);
           
            
            $this->cargarRelacionesFormulario($form,$entity,$em);
            $em->flush();
              $feRegistro = ($entity->getFeRegistro() ? $entity->getFeRegistro() : new \DateTime('now'));
            $this->get('session')->getFlashBag()->set('exito','La Inspección N° '.$entity->getCodInspeccion().' realizada a la entidad socioeducativa '.$entity->getEntidad()->getNbEntidad().' de fecha '.$feRegistro->format('d-m-Y').' a sido registrada exitosamente.');              
            return $this->redirect($this->generateUrl('inspeccion_poblacion'));
            //return $this->redirect($this->generateUrl('inspeccion_poblacion_semi_masculino_show', array('id' => $entity->getId())));
        }

        return $this->render('SieseEntityBundle:InspeccionesEntidadesPob/MasSemiPriv:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
            'catPersonalProf' => $catPersonalProf,
            'catAsistenciaTecnica' => $catAsistenciaTecnica,
            'catServiciosBasicos' => $catServiciosBasicos,
            'catInfraestructura' => $catInfraestructura
        ));
    }
    
  
    /**
    * Creates a form to create a InspeccionesEntidadesPob entity.
    *
    * @param InspeccionesEntidadesPob $entity The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createCreateForm(InspeccionesEntidadesPob $entity,$usuario)
    {
        $form = $this->createForm(new InspeccionesPobSemPrivMasType($this->getDoctrine()->getManager(),$usuario), $entity, array(
            'action' => $this->generateUrl('inspeccion_poblacion_semi_masculino_create'),
            'method' => 'POST',
        ));

        $form->add('submit', 'submit', array('label' => 'Registrar Inspeccion',
                                             'attr' => array('class' => 'btn btn-warning')));

        return $form;
    }

    /**
     * Displays a form to create a new InspeccionesEntidadesPob entity.
     *
     */
    public function newAction()
    {
        $entity = new InspeccionesEntidadesPob();
        $usuario = $this->getUser();
        
        $form   = $this->createCreateForm($entity,$usuario);
        $em = $this->getDoctrine()->getManager();
        $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
        $catAsistenciaTecnica = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
        $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
        $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
        
        
        
        return $this->render('SieseEntityBundle:InspeccionesEntidadesPob/MasSemiPriv:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView(),
            'catPersonalProf' => $catPersonalProf,
            'catAsistenciaTecnica' => $catAsistenciaTecnica,
            'catServiciosBasicos' => $catServiciosBasicos,
            'catInfraestructura' => $catInfraestructura,
            'sedesUsuario' => $usuario->getSedesUsuario()
        ));
    }

    /**
     * Finds and displays a InspeccionesEntidadesPob entity.
     *
     */
    public function showAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $usuario = $this->getUser();
        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);
        $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
        $catAsistenciaTecnica =$em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
        $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
        $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
       
        
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find InspeccionesEntidadesPob entity.');
        }
        $secContext = $this->get('security.context');
        $aprobacionForm = null;
        $deleteForm = null;
        
        /* Si el usuario es  REGISTRADOR, debe tener el boton "Enviar para Aprobación" */
        if (true === $secContext->isGranted('ROLE_USUARIO')) {
          $aForm = $this->createAprobacionForm($entity,$usuario);
          $dForm = $this->createDeleteForm($id); // Solo el registrador puede eliminar sus inspecciones
          
          $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
          $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacion($entity,$aForm);
          $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacionMasNoComunes($entity,$aForm);
        
          $aprobacionForm = $aForm->createView();
          $deleteForm = $dForm->createView();
        } else {
           $aForm = $this->createAprobacionForm($entity,$usuario);
          
           $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
           $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacion($entity,$aForm);
           $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacionMasNoComunes($entity,$aForm);

           $aprobacionForm = $aForm->createView();
        }
        
        
       

        return $this->render('SieseEntityBundle:InspeccionesEntidadesPob/MasSemiPriv:show.html.twig', array(
            'entity'      => $entity,
              'form'   => $aprobacionForm,
            'delete_form' => $deleteForm,       
            'catPersonalProf' => $catPersonalProf,
            'catAsistenciaTecnica' =>$catAsistenciaTecnica,
            'catServiciosBasicos' =>$catServiciosBasicos,
            'catInfraestructura' =>$catInfraestructura));
    }

    /**
     * Displays a form to edit an existing InspeccionesEntidadesPob entity.
     *
     */
    public function editAction($id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);

        $usuario = $this->getUser();
        $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
        $catAsistenciaTecnica = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
        $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
        $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
        
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find InspeccionesEntidadesPob entity.');
        }
        $editForm = $this->createEditForm($entity);
        
        $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
        $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacion($entity,$editForm);       
        $servCargarRelacionesInspecciones->mostrarRelacionesFormularioPoblacionMasNoComunes($entity,$editForm);
        
        $deleteForm = $this->createDeleteForm($id);
    
        return $this->render('SieseEntityBundle:InspeccionesEntidadesPob/MasSemiPriv:edit.html.twig', array(
            'entity'      => $entity,
            'form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
            'catPersonalProf' => $catPersonalProf,
            'catAsistenciaTecnica' => $catAsistenciaTecnica,
            'catServiciosBasicos' => $catServiciosBasicos,
            'catInfraestructura' => $catInfraestructura,
            'sedesUsuario' => $usuario->getSedesUsuario()
        ));
    }

    /**
    * Creates a form to edit a InspeccionesEntidadesPob entity.
    *
    * @param InspeccionesEntidadesPob $entity The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createEditForm(InspeccionesEntidadesPob $entity)
    {
        $form = $this->createForm(new InspeccionesPobSemPrivMasType($this->getDoctrine()->getManager(),$this->getUser()), $entity, array(
            'action' => $this->generateUrl('inspeccion_poblacion_semi_masculino_update', array('id' => $entity->getId())),
            'method' => 'PUT',
        ));

        $form->add('submit', 'submit', array('label' => 'Editar','attr' => array('class' => 'btn btn-warning')));

        return $form;
    }
    /**
     * Edits an existing InspeccionesEntidadesPob entity.
     *
     */
    public function updateAction(Request $request, $id)
    {
        $em = $this->getDoctrine()->getManager();

        $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);
        $usuario = $this->getUser();
        $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
        $catAsistenciaTecnica = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
        $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
        $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();       
        
        if (!$entity) {
            throw $this->createNotFoundException('Unable to find InspeccionesEntidadesPob entity.');
        }

        $deleteForm = $this->createDeleteForm($id);
        $editForm = $this->createEditForm($entity);
        $editForm->handleRequest($request);

        if ($request->getMethod() === 'POST' || $request->getMethod() === 'PUT') {
            /* Servicio para generar el codigo de la inspeccion */
            $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');

            if (!$entity->getCodInspeccion()):
                   $fechaActual = ($entity->getFeRegistro() ? $entity->getFeRegistro() : new \DateTime('now'));
                $servCargarRelacionesInspecciones->crearCodigoInspeccion($entity,$editForm,'MS',$entity->getFeRegistro());
            endif;
            
            $entity->setEstadoInspeccion($editForm->get('estadoEnt')->getData()); 
            $entity->setEntidad($editForm->get('entidad')->getData());
            $em->flush();
            $this->cargarRelacionesFormulario($editForm,$entity,$em);
            $this->get('session')->getFlashBag()->set('exito','La inspección N° '.$entity->getCodInspeccion().' ha sido modificada de manera exitosa.');
            return $this->redirect($this->generateUrl('inspeccion_poblacion_semi_masculino'));
        }

        return $this->render('SieseEntityBundle:InspeccionesEntidadesPob/MasSemiPriv:edit.html.twig', array(
            'entity'      => $entity,
            'form'   => $editForm->createView(),
            'delete_form' => $deleteForm->createView(),
            'catPersonalProf' => $catPersonalProf,
            'catAsistenciaTecnica' => $catAsistenciaTecnica,
            'catServiciosBasicos' => $catServiciosBasicos,
            'catInfraestructura' => $catInfraestructura,
            'sedesUsuario' => $usuario->getSedesUsuario()
        ));
    }
    
    
    /**
     * Funcion para setear todas las relaciones Muchos a Muchos de la Inspeccion
     * de la Población de Entidades al cargarlas
     * 
     * @author Gabriel E. Peñaranda G. <gabriel.e.p.gonzalez@gmail.com>
     * @param type $form
     * @param type $entity
     * @param type $em
     */
    public function cargarRelacionesFormulario($form,$entidadInspeccion,$em) {
       
        
    
      /* 
       * Pregunta 28
       */
      $catPersonalProf = $em->getRepository('SieseEntityBundle:CatPersonal')->findBy(array('estatus' => 'P'));
       
      foreach($catPersonalProf as $row):
        if($row->getId() != 27):
        $findRel = $em->getRepository('SieseEntityBundle:EqTecProfEntidadInsPob')->findOneBy(array('entidadInspeccion' => $entidadInspeccion, 
                                                                                                'personalProf' => $row));
        
        $eqTecProfEntidadInsPob = ($findRel ? $findRel : new EqTecProfEntidadInsPob());
        
        
        $personalProf = $form->get('personalProf_'.$row->getId())->getData(); 
        /* De los Rangos seleccionados se genera la cantidad de Poblacion que
         * existe en la entidad por ese Rango
         */
        
        $eqTecProfEntidadInsPob->setPersonalProf($row);
        $eqTecProfEntidadInsPob->setEntidadInspeccion($entidadInspeccion);
        $eqTecProfEntidadInsPob->setRespuestaPregunta($personalProf);
        
        if($noConverProf = $form->get('noConverProf_'.$row->getId())->getData()):
           $eqTecProfEntidadInsPob->setRespuestaNoConver($noConverProf);   
        endif;
        
        $em->persist($eqTecProfEntidadInsPob);
        endif;
      endforeach;
      
      /* 
       * Pregunta 30
       */
      $catAsisTecProf = $em->getRepository('SieseEntityBundle:CatAsistenciaTecnica')->findAll();
       
      foreach($catAsisTecProf as $row):
        if($row->getId() != 8):
        $findRel = $em->getRepository('SieseEntityBundle:AsisTecProfEntidadInsPob')->findOneBy(array('entidadInspeccion' => $entidadInspeccion, 
                                                                                                     'asistenciaTecnica' => $row));
        
        $asisTecProfEntidadInsPob = ($findRel ? $findRel : new AsisTecProfEntidadInsPob());
        
        
       $respuestaPreg = $form->get('asisTecProf_'.$row->getId())->getData(); 
        /* De los Rangos seleccionados se genera la cantidad de Poblacion que
         * existe en la entidad por ese Rango
         */
        
        $asisTecProfEntidadInsPob->setAsistenciaTecnica($row);
        $asisTecProfEntidadInsPob->setEntidadInspeccion($entidadInspeccion);
        $asisTecProfEntidadInsPob->setRespuestaPregunta($respuestaPreg);

        $em->persist($asisTecProfEntidadInsPob);
        endif;
      endforeach;   
      
      /* 
       * Pregunta 37
       */
      $participacionDisenoAct = $form->get('participacionDisenoAct')->getData();
       
      if($participacionDisenoAct):
        foreach($participacionDisenoAct as $row):
          $findRel = $em->getRepository('SieseEntityBundle:PartDisenoActEntInsPob')->findOneBy(array('entidadInspeccionPob' => $entidadInspeccion, 
                                                                                                       'partAct' => $row));
        
        $partDisenoActEntInsPob = ($findRel ? $findRel : new PartDisenoActEntInsPob()); 
        
          $partDisenoActEntInsPob->setPartAct($row);
          $partDisenoActEntInsPob->setEntidadInspeccionPob($entidadInspeccion);
        
          if($row->getId() == 4):
            $otraPartAct = $form->get('otraPartAct')->getData(); 
            if($otraPartAct):
              $partDisenoActEntInsPob->setOtraPartAct($otraPartAct);    
            endif;
          endif;
          $em->persist($partDisenoActEntInsPob);
        endforeach; 
      endif;
      
      /* 
       * Pregunta 82
       */
      $funcionarioComuFrec = $form->get('funcionarioComuFrec')->getData();
       
      if($funcionarioComuFrec):
      foreach($funcionarioComuFrec as $row):
        $findRel = $em->getRepository('SieseEntityBundle:ComuFuncionarioEntidadInsPob')->findOneBy(array('entidadInspeccionPob' => $entidadInspeccion, 
                                                                                                   'funcionario' => $row));
        
        $comuFuncionarioEntidadInsPob = ($findRel ? $findRel : new ComuFuncionarioEntidadInsPob());
                
        
        $comuFuncionarioEntidadInsPob->setFuncionario($row);
        $comuFuncionarioEntidadInsPob->setEntidadInspeccionPob($entidadInspeccion);
        
        if($row->getId() == 5):
          $otro = $form->get('otroFuncionario')->getData(); 
          if($otro):
            $comuFuncionarioEntidadInsPob->setOtroFuncionario($otro);    
          endif;
        endif;
        

        $em->persist($comuFuncionarioEntidadInsPob);
      endforeach;   
      endif;
         /* 
       * Pregunta 87
       * 
       */
      $mediosComunicacion = $form->get('mediosComunicacion')->getData(); 
       
      $relPrevias = $em->getRepository('SieseEntityBundle:MediosComunicacionEntidadInspeccionPob')->findBy(array('entidadInspeccionPob' => $entidadInspeccion));
      
      if($relPrevias):
        foreach($relPrevias as $row):
          $em->remove($row);
          $em->flush();
        endforeach;    
      endif;
      
      if($mediosComunicacion):
        foreach($mediosComunicacion as $row):
          
          $findRel = $em->getRepository('SieseEntityBundle:MediosComunicacionEntidadInspeccionPob')->findOneBy(array('entidadInspeccionPob' => $entidadInspeccion,
                                                                                                                   'medioComunicacion' => $row));
          $medComu = ($findRel ? $findRel : new MediosComunicacionEntidadInspeccionPob());    
       
          
          $medComu->setMedioComunicacion($row);
          $medComu->setEntidadInspeccionPob($entidadInspeccion);
        
          if($row->getId() == 6):
            $medComu->setOtroMedioComunicacion($form->get('otroMedioComunicacion')->getData());    
          endif;

          $em->persist($medComu);
        endforeach;
      endif;
      
      /* 
       * Pregunta 87
       */
        $catServiciosBasicos = $em->getRepository('SieseEntityBundle:CatServiciosBasicos')->findAll();
       
      foreach($catServiciosBasicos as $row):
        $findRel = $em->getRepository('SieseEntityBundle:CalidadServBasEntInsPob')->findOneBy(array('entidadInspeccionPob' => $entidadInspeccion, 
                                                                                                    'calidadServicio' => $row));
        
        $calidadServBasEntInsPob = ($findRel ? $findRel : new CalidadServBasEntInsPob());          
          
        
        $servBas = $form->get('servBas_'.$row->getId())->getData(); 
        
        $calidadServBasEntInsPob->setCalidadServicio($row);
        $calidadServBasEntInsPob->setEntidadInspeccion($entidadInspeccion);
        $calidadServBasEntInsPob->setCalidad($servBas);
        
        
        
        $em->persist($calidadServBasEntInsPob);
      endforeach;  
      
      /* 
       * Pregunta 88, 89
       */
        $catInfraestructura = $em->getRepository('SieseEntityBundle:CatInfraestructura')->findAll();
       
      foreach($catInfraestructura as $row):
        $findRel = $em->getRepository('SieseEntityBundle:CondicionHabEntidadInsPob')->findOneBy(array('entidadInspeccionPob' => $entidadInspeccion, 
                                                                                                    'condicionHabitacion' => $row));
        
        $condicionHabEntidadInsPob = ($findRel ? $findRel : new CondicionHabEntidadInsPob());
        
        $findRel = $em->getRepository('SieseEntityBundle:InfraestructuraEntidadInsPob')->findOneBy(array('entidadInspeccionPob' => $entidadInspeccion, 
                                                                                                    'infraestructura' => $row));
        
        $infraestructuraEntidadInsPob = ($findRel ? $findRel : new InfraestructuraEntidadInsPob());
        
        
        $infraestructura = $form->get('infraestructura_'.$row->getId())->getData(); 
        $conHab = $form->get('conHab_'.$row->getId())->getData(); 
        
        $condicionHabEntidadInsPob->setCondicionHabitacion($row);
        $condicionHabEntidadInsPob->setEntidadInspeccionPob($entidadInspeccion);
        $condicionHabEntidadInsPob->setCalidad($conHab);
        
        $infraestructuraEntidadInsPob->setInfraestructura($row);
        $infraestructuraEntidadInsPob->setEntidadInspeccionPob($entidadInspeccion);
        $infraestructuraEntidadInsPob->setCalidad($infraestructura);
        
        $em->persist($condicionHabEntidadInsPob);
        $em->persist($infraestructuraEntidadInsPob);
      endforeach;      
      
      $em->flush();
    }    
    
    
    /**
     * Deletes a InspeccionesEntidadesPob entity.
     *
     */
    public function deleteAction(Request $request, $id)
    {
        $form = $this->createDeleteForm($id);
        $form->handleRequest($request);

        if ($request->getMethod() === 'POST' || $request->getMethod() === 'PUT') {
            $em = $this->getDoctrine()->getManager();
            $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);

            if (!$entity) {
              $this->get('session')->getFlashBag()->set('error','La inspección no pudo ser eliminada.');
              return $this->redirect($this->generateUrl('inspeccion_poblacion_semi_masculino'));
            }

          $entity->setEstatus('E');
          $em->persist($entity);
          $em->flush();
          $this->get('session')->getFlashBag()->set('exito','La inspección N° '.$entity->getCodInspeccion().' ha sido eliminada de manera exitosa.');
        }

        return $this->redirect($this->generateUrl('inspeccion_poblacion_semi_masculino'));
    }

    /**
     * Creates a form to delete a InspeccionesEntidadesPob entity by id.
     *
     * @param mixed $id The entity id
     *
     * @return \Symfony\Component\Form\Form The form
     */
    private function createDeleteForm($id)
    {
        return $this->createFormBuilder()
            ->setAction($this->generateUrl('inspeccion_poblacion_semi_masculino_delete', array('id' => $id)))
            ->setMethod('DELETE')
            ->add('submit', 'submit', array('label' => 'Eliminar','attr' => array('class' => 'btn btn-danger')))
            ->getForm()
        ;
    }

    public function municipiosPorEstadoAction(Request $request)
    {
        $estado_id = $request->request->get('estado_id');

        $em = $this->getDoctrine()->getManager();
        $municipios = $em->getRepository('SieseEntityBundle:CatMunicipios')->findByEstadoId($estado_id);

        return new JsonResponse($municipios);
    }    
    
    public function entidadesPorEstadoAction(Request $request) {
        $estado_id = $request->request->get('estado_id');

        $em = $this->getDoctrine()->getManager();
        $entities = $em->getRepository('SieseEntityBundle:Entidades')->findByEstadoId($estado_id);

        return new JsonResponse($entities); 
    }
    
    public function guardarDatosInsPobAction(Request $request,$id) {
        $em = $this->getDoctrine()->getManager();
        $entity = ($id != 'vacio' ? $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id) : new InspeccionesEntidadesPob());
        
        $usuario = $this->getUser();
        $form = $this->createCreateForm($entity,$usuario);
        $form->handleRequest($request);
        
        
        
        $fechaActual = new \DateTime('now');
            
        $entity->setUsuario($usuario);
        $entity->setFeRegistro($fechaActual);
        $entity->setFeElaboracion($fechaActual);
        $entity->setAno($fechaActual->format('Y'));
        $entity->setTipoInspeccion('M');  // Masculino
        $entity->setTipoMedida('S');      // SemiPrivada
        

            
        $entity->setEstadoInspeccion($form->get('estadoEnt')->getData()); 
        
        $entity->setEntidad($form->get('entidad')->getData());
        
        $em->persist($entity);
        $this->cargarRelacionesFormulario($form,$entity,$em);
        $em->flush();
        

        return new JsonResponse($entity->getId());        
    }
    
    public function enviarParaAprobacionAction($id) {
      $em = $this->getDoctrine()->getManager();
      $entity = $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id);
        
      $entity->setEstatus('P'); // Pendiente por Aprobación del Defensor
      $em->persist($entity);
      $em->flush();
      
        
      return new JsonResponse('');        
    }
    
    
          /**
    * Crea el formulario para el envio de la inspección para su aprobación por
    * el Defensor
    *
    * @param InspeccionesEntidades $entity The entity
    *
    * @return \Symfony\Component\Form\Form The form
    */
    private function createAprobacionForm(InspeccionesEntidadesPob $entity,$usuario)
    {
        $form = $this->createForm(new InspeccionesPobSemPrivMasType($this->getDoctrine()->getManager(),$usuario), $entity, array(
            'action' => $this->generateUrl('post_inspeccion_enviar_aprobacion', array('id' => $entity->getId())),
            'method' => 'POST',
        ));

        //if ((true === $this->get('security.context')->isGranted('ROLE_USUARIO') && $entity->getEstatus() == 'R') or ($entity->getEstatus() == 'R' && $entity->getUsuario()->getId() == $this->getUser()->getId())) {
          $form->add('submit', 'submit', array('label' => 'Enviar para Aprobacion', 'attr' => array('class' => 'btn btn-warning')));
       // }
        
        return $form;
    }    
    
    public function editarDatosInsPobAction(Request $request,$id) {
        $em = $this->getDoctrine()->getManager();
        $entity = ($id != 'vacio' ? $em->getRepository('SieseEntityBundle:InspeccionesEntidadesPob')->find($id) : new InspeccionesEntidades());
        
        $usuario = $this->getUser();
        $editForm = $this->createEditForm($entity,$usuario);
        $editForm->handleRequest($request);
        
        /* Servicio para generar el codigo de la inspeccion */
        if (!$entity->getCodInspeccion()):
            $servCargarRelacionesInspecciones = $this->container->get('siese_entity.cargar_relaciones_inspecciones');
            $fechaActual = ($entity->getFeRegistro() ? $entity->getFeRegistro() : new \DateTime('now'));
            $servCargarRelacionesInspecciones->crearCodigoInspeccion($entity,$editForm,'MS',$entity->getFeRegistro());
        endif;
        /* Servicio para generar el codigo de la inspeccion */
            
        //$entity->setEstadoInspeccion($editForm->get('estado')->getData());  
      //  $entity->setCuentaEspCulturales($editForm->get('cuentaEspCulturales')->getData());
        $em->persist($entity);
        $em->flush();
        $this->cargarRelacionesFormulario($editForm,$entity,$em);
        
        return new Response((integer) $entity->getId());        
    }  

}

